package acwing.周赛;/**
 * @author： li
 * @date： 2022-04-03 16:01
 * @version 1.0
 */
import java.util.*;
public class 最长连续子序列2{
    static int N = 500010,M = 1000010;
    static int n,m;
    static int[] w = new int[N];
    static int[] cnt = new int[M];
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        n = scan.nextInt();
        m = scan.nextInt();
        //因为题目坐标是从1开始，所以我们从1下标开始
        for (int i = 1 ; i <= n ; i ++ ) w[i] = scan.nextInt();

        //res 表示现在最长的序列长度
        //l 表示左端点
        //r 表示右端点
        //t 表示区间中不同数的个数
        int res = 0,l = 0,r = 0;
        for (int i = 1,j = 1,t = 0; i <= n; i ++ ){
            //说明集合中没有加入过这个数，那就新加一个不同的数
            if (cnt[w[i]] == 0)  t ++ ;
            //然后集合中需要将这个数加上，
            cnt[w[i]] ++;

            //当区间中的不同的数的个数超过k，那么需要将区间末尾的元素删掉，保证区间中的数不同的数 <= m
            while(t > m){
                //如果他是独苗，说明集合中他只有一个数，所以只需要将他减掉，集合中不同的数就会减1
                if (cnt[w[j]] == 1) t --;
                //然后将这个是从区间中去掉
                cnt[w[j]] --;
                //然后j指针往右移动一格
                j ++ ;
            }

            //如果不同的数不超过k个的区间长度变大，那就更新一下答案左右端点，然后将答案长度更新
            if (i - j + 1 > res){
                res = i - j + 1;
                l = j;   ///左右坐标就是ij的坐标
                r = i;
            }
        }
        System.out.println(l + " " + r);
    }
}
//
//作者：栗子ing
//        链接：https://www.acwing.com/solution/content/107606/
//        来源：AcWing
//        著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
